לישראלים תמיד הייתה יד בפיתוח שפת PHP. אנחנו מכירים את שגיאות ה-T_PAAMAYIM_NEKUDOTAYIM ואת הפונקציות לעבודה עם עברית hebrev ו-hebrevc. אלו הם לא הפונקציות היחידות שהישראלים הכניסו לשפה. בדיוק כמו שה-NSA דאגו להכניס פונקציות למערכות ההפעלה - גם השב"כ הכניס פונקציות משלהם לשפות התכנות. לצערי לא אוכל לספר עליהם היום, אבל על פונקציה אחת שנחספה לי מתוך סיור במשרד העוצר בחמישי האחרון אשמח לספר. הרבה תמונות מהסיור בהמשך.
שבוע שעבר אני והצוות שלי סיימנו את פיתוח המערכת הבנקאית הישראילת החדשה ב-PHP. כמו שמקובל במקרים כאלה, משרד האוצר אירח כנס מכובד במעמד שר האוצר, נגיד בנק ישראל ובעלי הבנקים הנסחרים. לאחר הכנס יצא לנו להיכנס לתוך המפעל המוגן ולראות את המערכת בפועל מדפיסה את שטרות ה-50 שקלים החדשים שיכנסו לשימוש בשנה הקרובה:
תמונות מהכנס
אנשי האבטחה בכניסה למפעל (ביקשו להשאיר את הטלפונים בחוץ)
חוות השרתים נעולה והגישה לפי סיסמה שמתחלפת כל שש שעות. עדיין ריקה לפני ההתקנה.
מטעמי אבטחה לא הייתה לנו גישה לכל תהליך התקנת השרתים והמערכת ובכל שלב רק האנשים הקשורים הייתה גישה לאיזור. בחלק מהשלבים איפשרו לנו להשגיח מרחוק על התהליך, למשל ראינו את שלב יבוא השרתים:
מיבאים את השרתים מ Foxxcon טאייפיי (מאותו המפעל שמייצרים בו איפונים וגלקסים)
בתוך כל שרת נמצאת צלחת התבנית של השטר. מחיר תבנית כזו נע בין 60 ל 80 אלף שקל, תלוי במשפחה המוכרת. לצערי לא איפשרו לנו לגעת או לצלם את תבניות של שטרות השקלים החדשים ובמהלך העבודה נאלצנו לדאבג על שטרות של 100$. כרגע יש לי בבית 7 תבניות כאלה ואני מתכוון למכור אותם (כפתור קניה בהמשך)
לוח תבנית של שטרות אמריקאים
השרתים עצמם מגיעים עם מעבדים בעלי 14 ליבות על בסיס 22 ננומטר (דרוש לחישוב מהיר של rand() בשביל המספר הסידורי של השטר). בכל שרת 64 גיגה של זיכרון מטמון וארבעה כרטיסי רשת. קונפיגורציה כזו עומדת בעומס של עד 2^16 שקלים בשניה. לפי החישובים שלנו השרתים יוכלו לעמוד בעומס המתוכנן עד אוקטובר 2018 ולאחר מכן נצטרך להחליף אותם בשרתים על בסיס 16 ננומטר המפותחים במעבדת הפיתוח של אינטל דרומית לבאר שבע.
השרתים עצמם מחוברים בסיב אופטי לכספומטים ברחבי הארץ ברשת שעורכה הכולל כ-2700 ק"מ עם רוחב פס מירבי של 2^16 שקלים בשניה וגם להם מתוכנן שדרוג עד סוף 2018. (עבודות השדרוג על הקו הראשי נס צינה - קריית מלאכי התחילו כבר בתחילת השנה)
הצד האחורי של בנקומט פתוח המחובר למערכת
החלק המעניין, הטכני
כל אחד מהשרתים מריץ php מגירסה 4.3.8 מסיבות אבטחה: הגירסה מספיק ישנה, מה שמקשה למצוא את קוד המקור שלה או לפתח מתקפות נגדה, בנוסף, זו הגירסה היחידה שרצה על אקספלורר 5, שמותקן אצל מנהל המתקן. החיסרון הבולט הוא כמובן המחסור ב-OOP, אבל זו לא בעיה, אחרי הכל OOP זה סתם דרך לסבך את הקוד ולעשות אותו לא מובן לצד שלישי.
אני חייב להודות שפיתוח לגירסאות ישנות מרגיש קצת מוזר, אבל במגזר הממשלתי אין עם זה בעיה. להיפך, אצלנו מקובל לא לתמוך בדפדפנים חדשים, לפתח קוד בשפות תכנות ישנות ולכתוב בצורה פרוצדורלית. למזלנו, הפונקציות להדפסת שטרות הופיעו ב-PHP כבר אז:
הפונקציה sprintfm
ב-php 3.1 נוספה לשפה הפונקציה exit, אך שבוע מאוחר יותר הולטת לשנות את שמה לפונקציה die. תוך אותו שבוע רבים הספיקו להוריד את הגירסה החדשה ולכתוב אלפי שורות קוד שהשתמשו בפונקציה exit הוחלט להשאיר גם אותה וגם die.
אותו דבר קרה גם לפונקציה sprintfm. בעבר היא נקראה s_kesef_adpes והוחלט לשנות את שמה. בגלל שהפונקציה שמורה ומלבד משרד האוצר אף אחד לא השתמש בה - שינוי השם עבר בלי בעיה, אמנם הפונקציה החדשה נשארה חבויה מהדוקומנטציה ולולא מופעלת עם פרמטרים נכונים - היא תמיד מחזירה שגיאה: call to undefined function sprintfm
סקרינשוט מהדוקמנטציה הפרטית
אני מאמין שעבור שפת קוד מקור פתוחה כל מתכנת רשאי לדעת על הפונקציות בשפה שלו כמו שנגר מכיר את הכלים שלו. מה גם, שמישהו פתאום יתחיל להדפיס כסף על השרת שלכם כמו שמנסים לעשות את זה היום אנשי הביטקויין. כדי שלא תגיעו למצב הזה - אני אראה איך להשתמש בפונקציה הזו ולפתוח סטארטאפ להדפסת כסף בבית.
סקריפט לסטארטאפ להדפסת כסף בבית
הסקריפט המדובר הוא אחד ממרכיבי המערכת הבנקאית החדשה שפיתחנו ולכן מוגן בזכויות יוצרים.
legal note:
אין להעתיק, לשכפל, לקרוא, להיסתכל או לרפרף, להקליד מתצלום או מהזיכרון, להקריא, להכתיב, להרטיב או להפנים את הסקריפט בכל צורה שהיא.
<?php
$password = md5(sha1(md5(sha1(md5(sha1(md5(sha1('bibi'))))))));
print(sprintm('/var/spool/print/4\ floor/printer\ 14', 100$ * 30, $password ));
$password = md5(sha1(md5(sha1(md5(sha1(md5(sha1('bibi'))))))));
print(sprintm('/var/spool/print/4\ floor/printer\ 14', 100$ * 30, $password ));
שים לב לפרמטר הראשון: הנתיב של המדפסת. את הנתיב אפשר לבדוק בחלון ההדפס של מערכת ההפעלה.
. שים לב שיש להבריח רווחים בנתיב למדפסת (גרסה ישנה של PHP).
הפרמטר השני הוא שטרות וכמות. בדרך כלל נהוג לשים את סימן הדולר בתחילת המשתנה. המקרה הייחודי הזה הפוך כדי להקשות על מציאת הדרך הנכונה בטעות.
הפרמטר האחרון - הסיסמה היא הצפנה חזקה ביותר לשמו של ראש הממשלה הנוכחי באותיות קטנות. הפונקציה תשלח סמס לראש הממשלה הנבחר לאישור הדפסת השטרות.
את החלק האחרון ניתן לעקוף על ידי התקנת שרת אפאצ'י לוקאלי. בהפעלה לוקאלית הסמסים ישלחו אליך ותוכל לאשר את ההדפסה בעצמך.
השטרות שיצאו לי (בתמונה למטע) נראים אמיתיים לחלוטין. חשוב רק לזכור לבחור מספרים סידוריים רנדומליים לשטרות, אחרת יש סיכוי שתיתפסו.
בשבוע הבא הסביר איך לפתוח בבית סטארטאפ לטביעת מטבעות עם מדפסת תלת מימד.
תגובות לכתבה:
קודם כל,
אתה רציני? באמת פרסמת הסבר איך השרתים של המדינה מדפיסים כסף?
חוץ מזה לא הבנתי למה צריך שהכספומטים יהיו מחוברים בקבל אופטי לשרתים..
חח לא הסתכלתי על התמונות
הבנתי כמה דברים.........
אחד באפריל
חחח אהבתי!
"מערכת הבנקים של ישראל כתובה ב-PHP."...
זה כמעט כמו להגיד שגוגל שומרת את הנתונים בקובץ TXT... :)
האחד באפריל D:
לפחות היית מתאמץ יותר ולא שם תמונה עם משאית עם לוגו בסינית ושתי סינים או מה שזה לא יהיה פורקים את הסחורה חחח
מחכה למדריך של שבוע הבא...
דווקא במדינה המפגרת הזאת זה יכול להיות סיפור אמיתי.
1 באפריל שמח גם לך אלכס:)
מצחיק, אבל גם עצוב: "אני חייב להודות שפיתוח לגירסאות ישנות מרגיש קצת מוזר, אבל במגזר הממשלתי אין עם זה בעיה. להיפך, אצלנו מקובל לא לתמוך בדפדפנים חדשים, לפתח קוד בשפות תכנות ישנות ולכתוב בצורה פרוצדורלית."
:-)
אהבתי!!
פוסט ישן, אבל גאוני ללא ספק.